/*
 * OrcamentoXX.java
 *
 * Created on 13/06/2009, 08:10:25
 * Copyright Guilherme
 */
package Soligee.view;

import Soligee.controller.bo.OrcamentoBO;
import Soligee.view.ApplicationBean1;
import com.icesoft.faces.component.ext.HtmlCommandButton;
import com.icesoft.faces.component.ext.HtmlCommandLink;
import com.icesoft.faces.component.ext.HtmlDataTable;
import com.icesoft.faces.component.ext.HtmlInputText;
import com.icesoft.faces.component.ext.HtmlInputTextarea;
import com.icesoft.faces.component.ext.HtmlOutputText;
import com.icesoft.faces.component.ext.HtmlSelectOneMenu;
import com.icesoft.faces.component.jsfcl.data.DefaultSelectedData;
import com.icesoft.faces.component.jsfcl.data.DefaultSelectionItems;
import com.icesoft.faces.component.jsfcl.data.DefaultTableDataModel;
import com.icesoft.faces.component.jsfcl.data.PopupBean;
import com.icesoft.faces.component.jsfcl.data.SelectInputDateBean;
import com.icesoft.faces.component.panelpopup.PanelPopup;
import com.icesoft.faces.component.paneltabset.PanelTab;
import com.icesoft.faces.component.paneltabset.PanelTabSet;
import com.icesoft.faces.component.selectinputdate.SelectInputDate;
import com.icesoft.faces.component.selectinputtext.SelectInputText;
import com.sun.rave.faces.converter.SqlDateConverter;
import com.sun.rave.faces.data.DefaultSelectItemsArray;
import com.sun.rave.web.ui.appbase.AbstractPageBean;
import Soligee.decorador.DecoradorNF;
import Soligee.controller.facade.sessionFacadeImplements.*;
import Soligee.decorador.DecoradorInicializaCombos;
import Soligee.decorador.PaginacaoListaCincoEmCinco;
import Soligee.decorador.ValidaCamposObrigatorios;
import java.util.ArrayList;
import java.util.List;
import javax.faces.FacesException;
import javax.faces.event.ActionEvent;
import javax.faces.event.ValueChangeEvent;
import javax.faces.model.SelectItem;
import Soligee.model.vo.cadastros.*;
import Soligee.model.vo.lancamentos.ItensOrcamentoVO;
import Soligee.model.vo.lancamentos.OrcamentoVO;
import com.icesoft.faces.context.effects.Highlight;
import java.text.DecimalFormat;
import java.util.Date;
import java.util.Iterator;


/**
 * <p>Page bean that corresponds to a similarly named JSP page.  This
 * class contains component definitions (and initialization code) for
 * all components that you have defined on this page, as well as
 * lifecycle methods and event  handlers where you may add behavior
 * to respond to incoming events.</p>
 */
public class CadastrarOrcamento extends AbstractPageBean {
    // <editor-fold defaultstate="collapsed" desc="Managed Component Definition">
    private int __placeholder;
    //formatar a saida do double
    DecimalFormat digitos = new java.text.DecimalFormat("0.00");
    //decorador da tabela de itens
    private static List<DecoradorNF> listaDecoradora = new ArrayList();

    //atributo necessario para paginacao da tabela de itens
    private static PaginacaoListaCincoEmCinco paginacaoTabelaItens;

    private DefaultSelectionItems item; //item do autocomplete produto

    private DefaultSelectionItems item2; //item do autocomplete cliente
     //cria uma lista de produtos para serem adicinados na chave composta quando cadastrar
    private static List<ProdutoVO> listaProdutos = new ArrayList();

    //variavel necessaria para realizar calculos negocio
    private static OrcamentoBO orcamentoBo;
    //cria uma lista de itens a serem cadastrados para essa nota
    private List<ItensOrcamentoVO> listaItensOrcamento = new ArrayList();

    private static int controleSaida = 0;


    public static List<ProdutoVO> getListaProdutos() {
        return listaProdutos;
    }

    public static void setListaProdutos(List<ProdutoVO> listaProdutos) {
        CadastrarOrcamento.listaProdutos = listaProdutos;
    }

    public DefaultSelectionItems getItem2() {
        return item2;
    }

    public void setItem2(DefaultSelectionItems item2) {
        this.item2 = item2;
    }

  
    public static List<DecoradorNF> getListaDecoradora() {
        return listaDecoradora;
    }

    public static void setListaDecoradora(List<DecoradorNF> listaDecoradora) {
        CadastrarOrcamento.listaDecoradora = listaDecoradora;
    }

    public List<ItensOrcamentoVO> getListaItensOrcamento() {
        return listaItensOrcamento;
    }

    public void setListaItensOrcamento(List<ItensOrcamentoVO> listaItensOrcamento) {
        this.listaItensOrcamento = listaItensOrcamento;
    }

    public static OrcamentoBO getOrcamentoBo() {
        return orcamentoBo;
    }

    public static void setOrcamentoBo(OrcamentoBO orcamentoBo) {
        CadastrarOrcamento.orcamentoBo = orcamentoBo;
    }

    public DefaultSelectionItems getItem() {
        return item;
    }


    public void setItem(DefaultSelectionItems item) {
        this.item = item;
    }

    /*
     * <p>Automatically managed component initialization.  <strong>WARNING:</strong>
     * This method is automatically generated, so any user-specified code inserted
     * here is subject to being replaced.</p>
     */
    private void _init() throws Exception {
    }
    private DefaultTableDataModel dataTable1Model = new DefaultTableDataModel();

    public DefaultTableDataModel getDataTable1Model() {
        return dataTable1Model;
    }

    public void setDataTable1Model(DefaultTableDataModel dtdm) {
        this.dataTable1Model = dtdm;
    }

     //Plano Pagamento
    private DefaultSelectedData botaoSelecionadoPlanoPagamento = new DefaultSelectedData();

    public DefaultSelectedData getBotaoSelecionadoPlanoPagamento() {
        return botaoSelecionadoPlanoPagamento;
    }

    public void setBotaoSelecionadoPlanoPagamento(DefaultSelectedData dsd) {
        this.botaoSelecionadoPlanoPagamento = dsd;
    }
    private DefaultSelectionItems botaoPlanoPagamento = new DefaultSelectionItems();

    public DefaultSelectionItems getBotaoPlanoPagamento() {
        return botaoPlanoPagamento;
    }

    public void setBotaoPlanoPagamento(DefaultSelectionItems dsi) {
        this.botaoPlanoPagamento = dsi;
    }
    private SelectInputDateBean selectInputDate1Bean = new SelectInputDateBean();

    public SelectInputDateBean getSelectInputDate1Bean() {
        return selectInputDate1Bean;
    }

    public void setSelectInputDate1Bean(SelectInputDateBean sidb) {
        this.selectInputDate1Bean = sidb;
    }
    private SelectInputDateBean selectInputDateBean2 = new SelectInputDateBean();

    public SelectInputDateBean getSelectInputDateBean2() {
        return selectInputDateBean2;
    }

    public void setSelectInputDateBean2(SelectInputDateBean sidb) {
        this.selectInputDateBean2 = sidb;
    }
    private HtmlCommandButton btn_add = new HtmlCommandButton();

    public HtmlCommandButton getBtn_add() {
        return btn_add;
    }

    public void setBtn_add(HtmlCommandButton hcb) {
        this.btn_add = hcb;
    }
    private HtmlInputText campoValorUnitario = new HtmlInputText();

    public HtmlInputText getCampoValorUnitario() {
        return campoValorUnitario;
    }

    public void setCampoValorUnitario(HtmlInputText hit) {
        this.campoValorUnitario = hit;
    }
    private HtmlInputText campoQuantidade = new HtmlInputText();

    public HtmlInputText getCampoQuantidade() {
        return campoQuantidade;
    }

    public void setCampoQuantidade(HtmlInputText hit) {
        this.campoQuantidade = hit;
    }
    private SelectInputText produtoABuscar = new SelectInputText();

    public SelectInputText getProdutoABuscar() {
        return produtoABuscar;
    }

    public void setProdutoABuscar(SelectInputText sit) {
        this.produtoABuscar = sit;
    }
    private PanelTabSet painelAbasOrcamento = new PanelTabSet();

    public PanelTabSet getPainelAbasOrcamento() {
        return painelAbasOrcamento;
    }

    public void setPainelAbasOrcamento(PanelTabSet pts) {
        this.painelAbasOrcamento = pts;
    }
    private HtmlCommandButton tabelaItensOrcamentoFooterLastButton = new HtmlCommandButton();

    public HtmlCommandButton getTabelaItensOrcamentoFooterLastButton() {
        return tabelaItensOrcamentoFooterLastButton;
    }

    public void setTabelaItensOrcamentoFooterLastButton(HtmlCommandButton hcb) {
        this.tabelaItensOrcamentoFooterLastButton = hcb;
    }
    private HtmlCommandButton tabelaItensOrcamentoFooterNextButton = new HtmlCommandButton();

    public HtmlCommandButton getTabelaItensOrcamentoFooterNextButton() {
        return tabelaItensOrcamentoFooterNextButton;
    }

    public void setTabelaItensOrcamentoFooterNextButton(HtmlCommandButton hcb) {
        this.tabelaItensOrcamentoFooterNextButton = hcb;
    }
    private HtmlCommandButton tabelaItensOrcamentoFooterPreviousButton = new HtmlCommandButton();

    public HtmlCommandButton getTabelaItensOrcamentoFooterPreviousButton() {
        return tabelaItensOrcamentoFooterPreviousButton;
    }

    public void setTabelaItensOrcamentoFooterPreviousButton(HtmlCommandButton hcb) {
        this.tabelaItensOrcamentoFooterPreviousButton = hcb;
    }
    private HtmlCommandButton tabelaItensOrcamentoFooterFirstButton = new HtmlCommandButton();

    public HtmlCommandButton getTabelaItensOrcamentoFooterFirstButton() {
        return tabelaItensOrcamentoFooterFirstButton;
    }

    public void setTabelaItensOrcamentoFooterFirstButton(HtmlCommandButton hcb) {
        this.tabelaItensOrcamentoFooterFirstButton = hcb;
    }
    private javax.faces.component.html.HtmlCommandButton btnRemoverItem = new javax.faces.component.html.HtmlCommandButton();

    public javax.faces.component.html.HtmlCommandButton getBtnRemoverItem() {
        return btnRemoverItem;
    }

    public void setBtnRemoverItem(javax.faces.component.html.HtmlCommandButton hcb) {
        this.btnRemoverItem = hcb;
    }
    private HtmlDataTable tabelaItensOrcamento = new HtmlDataTable();

    public HtmlDataTable getTabelaItensOrcamento() {
        return tabelaItensOrcamento;
    }

    public void setTabelaItensOrcamento(HtmlDataTable hdt) {
        this.tabelaItensOrcamento = hdt;
    }
    private DefaultSelectedData selectOneMenu1Bean = new DefaultSelectedData();

    public DefaultSelectedData getSelectOneMenu1Bean() {
        return selectOneMenu1Bean;
    }

    public void setSelectOneMenu1Bean(DefaultSelectedData dsd) {
        this.selectOneMenu1Bean = dsd;
    }
    private HtmlInputText campoValorVista = new HtmlInputText();

    public HtmlInputText getCampoValorVista() {
        return campoValorVista;
    }

    public void setCampoValorVista(HtmlInputText hit) {
        this.campoValorVista = hit;
    }
    private HtmlInputTextarea campoObservacoes = new HtmlInputTextarea();

    public HtmlInputTextarea getCampoObservacoes() {
        return campoObservacoes;
    }

    public void setCampoObservacoes(HtmlInputTextarea hit) {
        this.campoObservacoes = hit;
    }
    private HtmlSelectOneMenu opcaoPlanoPagamento = new HtmlSelectOneMenu();

    public HtmlSelectOneMenu getOpcaoPlanoPagamento() {
        return opcaoPlanoPagamento;
    }

    public void setOpcaoPlanoPagamento(HtmlSelectOneMenu hsom) {
        this.opcaoPlanoPagamento = hsom;
    }
    private HtmlInputText campoValorPrazo = new HtmlInputText();

    public HtmlInputText getCampoValorPrazo() {
        return campoValorPrazo;
    }

    public void setCampoValorPrazo(HtmlInputText hit) {
        this.campoValorPrazo = hit;
    }
    private HtmlCommandButton btn_cadastrar = new HtmlCommandButton();

    public HtmlCommandButton getBtn_cadastrar() {
        return btn_cadastrar;
    }

    public void setBtn_cadastrar(HtmlCommandButton hcb) {
        this.btn_cadastrar = hcb;
    }
    private HtmlCommandLink link_finalizaOrcamento = new HtmlCommandLink();

    public HtmlCommandLink getLink_finalizaOrcamento() {
        return link_finalizaOrcamento;
    }

    public void setLink_finalizaOrcamento(HtmlCommandLink hcl) {
        this.link_finalizaOrcamento = hcl;
    }
    private HtmlInputText campoNumeroProdutos = new HtmlInputText();

    public HtmlInputText getCampoNumeroProdutos() {
        return campoNumeroProdutos;
    }

    public void setCampoNumeroProdutos(HtmlInputText hit) {
        this.campoNumeroProdutos = hit;
    }
    private PopupBean panelPopup1Bean = new PopupBean();

    public PopupBean getPanelPopup1Bean() {
        return panelPopup1Bean;
    }

    public void setPanelPopup1Bean(PopupBean pb) {
        this.panelPopup1Bean = pb;
    }
    private HtmlOutputText textoPopUp = new HtmlOutputText();

    public HtmlOutputText getTextoPopUp() {
        return textoPopUp;
    }

    public void setTextoPopUp(HtmlOutputText hot) {
        this.textoPopUp = hot;
    }
    private HtmlCommandButton btnPopUp1 = new HtmlCommandButton();

    public HtmlCommandButton getBtnPopUp1() {
        return btnPopUp1;
    }

    public void setBtnPopUp1(HtmlCommandButton hcb) {
        this.btnPopUp1 = hcb;
    }
    private HtmlCommandButton btnPopUp2 = new HtmlCommandButton();

    public HtmlCommandButton getBtnPopUp2() {
        return btnPopUp2;
    }

    public void setBtnPopUp2(HtmlCommandButton hcb) {
        this.btnPopUp2 = hcb;
    }
    private PanelPopup panelPopup = new PanelPopup();

    public PanelPopup getPanelPopup() {
        return panelPopup;
    }

    public void setPanelPopup(PanelPopup pp) {
        this.panelPopup = pp;
    }
    private SelectInputDate dataOrcamento = new SelectInputDate();

    public SelectInputDate getDataOrcamento() {
        return dataOrcamento;
    }

    public void setDataOrcamento(SelectInputDate sid) {
        this.dataOrcamento = sid;
    }
    private SelectInputDate validadeProposta = new SelectInputDate();

    public SelectInputDate getValidadeProposta() {
        return validadeProposta;
    }

    public void setValidadeProposta(SelectInputDate sid) {
        this.validadeProposta = sid;
    }
    private HtmlInputText campoValorTotalProdutos = new HtmlInputText();

    public HtmlInputText getCampoValorTotalProdutos() {
        return campoValorTotalProdutos;
    }

    public void setCampoValorTotalProdutos(HtmlInputText hit) {
        this.campoValorTotalProdutos = hit;
    }
    private HtmlInputText campoCodOrc = new HtmlInputText();

    public HtmlInputText getCampoCodOrc() {
        return campoCodOrc;
    }

    public void setCampoCodOrc(HtmlInputText hit) {
        this.campoCodOrc = hit;
    }
    private HtmlInputText campoId1 = new HtmlInputText();

    public HtmlInputText getCampoId1() {
        return campoId1;
    }

    public void setCampoId1(HtmlInputText hit) {
        this.campoId1 = hit;
    }
    private DefaultSelectedData defaultSelectedData1 = new DefaultSelectedData();

    public DefaultSelectedData getDefaultSelectedData1() {
        return defaultSelectedData1;
    }

    public void setDefaultSelectedData1(DefaultSelectedData dsd) {
        this.defaultSelectedData1 = dsd;
    }
    private DefaultSelectionItems selectOneMenu1DefaultItems1 = new DefaultSelectionItems();

    public DefaultSelectionItems getSelectOneMenu1DefaultItems1() {
        return selectOneMenu1DefaultItems1;
    }

    public void setSelectOneMenu1DefaultItems1(DefaultSelectionItems dsi) {
        this.selectOneMenu1DefaultItems1 = dsi;
    }

    private HtmlSelectOneMenu campoCliente = new HtmlSelectOneMenu();

    public HtmlSelectOneMenu getCampoCliente() {
        return campoCliente;
    }

    public void setCampoCliente(HtmlSelectOneMenu hsom) {
        this.campoCliente = hsom;
    }
    private DefaultSelectedData defaultSelectedData2 = new DefaultSelectedData();

    public DefaultSelectedData getDefaultSelectedData2() {
        return defaultSelectedData2;
    }

    public void setDefaultSelectedData2(DefaultSelectedData dsd) {
        this.defaultSelectedData2 = dsd;
    }
    private DefaultSelectionItems selectOneMenu1DefaultItems = new DefaultSelectionItems();

    public DefaultSelectionItems getSelectOneMenu1DefaultItems() {
        return selectOneMenu1DefaultItems;
    }

    public void setSelectOneMenu1DefaultItems(DefaultSelectionItems dsi) {
        this.selectOneMenu1DefaultItems = dsi;
    }
    private HtmlSelectOneMenu campoVendedor = new HtmlSelectOneMenu();

    public HtmlSelectOneMenu getCampoVendedor() {
        return campoVendedor;
    }

    public void setCampoVendedor(HtmlSelectOneMenu hsom) {
        this.campoVendedor = hsom;
    }
    private PanelTab aba02 = new PanelTab();

    public PanelTab getAba02() {
        return aba02;
    }

    public void setAba02(PanelTab pt) {
        this.aba02 = pt;
    }
    private PanelTab aba01 = new PanelTab();

    public PanelTab getAba01() {
        return aba01;
    }

    public void setAba01(PanelTab pt) {
        this.aba01 = pt;
    }
    private HtmlCommandButton btn_voltar = new HtmlCommandButton();

    public HtmlCommandButton getBtn_voltar() {
        return btn_voltar;
    }

    public void setBtn_voltar(HtmlCommandButton hcb) {
        this.btn_voltar = hcb;
    }
    private HtmlInputText campoIdItens = new HtmlInputText();

    public HtmlInputText getCampoIdItens() {
        return campoIdItens;
    }

    public void setCampoIdItens(HtmlInputText hit) {
        this.campoIdItens = hit;
    }
    private SqlDateConverter sqlDateConverter1 = new SqlDateConverter();

    public SqlDateConverter getSqlDateConverter1() {
        return sqlDateConverter1;
    }

    public void setSqlDateConverter1(SqlDateConverter sdc) {
        this.sqlDateConverter1 = sdc;
    }

    // </editor-fold>

    /**
     * <p>Construct a new Page bean instance.</p>
     */
    public CadastrarOrcamento() {
    }

    /**
     * <p>Callback method that is called whenever a page is navigated to,
     * either directly via a URL, or indirectly via page navigation.
     * Customize this method to acquire resources that will be needed
     * for event handlers and lifecycle methods, whether or not this
     * page is performing post back processing.</p>
     * 
     * <p>Note that, if the current request is a postback, the property
     * values of the components do <strong>not</strong> represent any
     * values submitted with this request.  Instead, they represent the
     * property values that were saved for this view when it was rendered.</p>
     */
    @Override
    public void init() {
        // Perform initializations inherited from our superclass
        
        super.init();       
        this.inicializaCampos();
        aba02.setDisabled(true);
        //teste submit
        // Perform application initialization that must complete
        // *before* managed components are initialized
        // TODO - add your own initialiation code here
            
        // <editor-fold defaultstate="collapsed" desc="Managed Component Initialization">
        // Initialize automatically managed components
        // *Note* - this logic should NOT be modified
        try {
            _init();
        } catch (Exception e) {
            log("OrcamentoXX Initialization Failure", e);
            throw e instanceof FacesException ? (FacesException) e: new FacesException(e);
        }
        
        // </editor-fold>
        // Perform application initialization that must complete
        // *after* managed components are initialized
        // TODO - add your own initialization code here
    }

    /**
     * <p>Callback method that is called after the component tree has been
     * restored, but before any event processing takes place.  This method
     * will <strong>only</strong> be called on a postback request that
     * is processing a form submit.  Customize this method to allocate
     * resources that will be required in your event handlers.</p>
     */
    @Override
    public void preprocess() {
    }

    /**
     * <p>Callback method that is called just before rendering takes place.
     * This method will <strong>only</strong> be called for the page that
     * will actually be rendered (and not, for example, on a page that
     * handled a postback and then navigated to a different page).  Customize
     * this method to allocate resources that will be required for rendering
     * this page.</p>
     */
    @Override
    public void prerender() {
    }

    /**
     * <p>Callback method that is called after rendering is completed for
     * this request, if <code>init()</code> was called (regardless of whether
     * or not this was the page that was actually rendered).  Customize this
     * method to release resources acquired in the <code>init()</code>,
     * <code>preprocess()</code>, or <code>prerender()</code> methods (or
     * acquired during execution of an event handler).</p>
     */
    @Override
    public void destroy() {
    }

    /**
     * <p>Retornar uma referência para o Bean de dados limitados.</p>
     *
     * @retorna uma referência para o bean de dados limitados
     */
    protected RequestBean1 getview$RequestBean1() {
        return (RequestBean1) getBean("view$RequestBean1");
    }

    /**
     * <p>Retornar uma referência para o Bean de dados limitados.</p>
     *
     * @retorna uma referência para o bean de dados limitados
     */
    protected SessionBean1 getview$SessionBean1() {
        return (SessionBean1) getBean("view$SessionBean1");
    }

    /**
     * <p>Retornar uma referência para o Bean de dados limitados.</p>
     *
     * @retorna uma referência para o bean de dados limitados
     */
    protected ApplicationBean1 getApplicationBean1() {
        return (ApplicationBean1) getBean("ApplicationBean1");
    }
    /**
     * <p>Retornar uma referência para o Bean de dados limitados.</p>
     *
     * @retorna uma referência para o bean de dados limitados
     */
    protected ApplicationBean1 getview$ApplicationBean1() {
        return (ApplicationBean1) getBean("view$ApplicationBean1");
    }

    /**
     * <p>Retornar uma referência para o Bean de dados limitados.</p>
     *
     * @retorna uma referência para o bean de dados limitados
     */
    protected CadastrarPessoaFisica getview$CadastrarPessoaFisica() {
        return (CadastrarPessoaFisica) getBean("view$CadastrarPessoaFisica");
    }

    /**
     * <p>Retornar uma referência para o Bean de dados limitados.</p>
     *
     * @retorna uma referência para o bean de dados limitados
     */
    protected BuscarPessoaFisica getview$BuscarPessoaFisica() {
        return (BuscarPessoaFisica) getBean("view$BuscarPessoaFisica");
    }

    /**
     * <p>Retornar uma referência para o Bean de dados limitados.</p>
     *
     * @retorna uma referência para o bean de dados limitados
     */
    protected CadastrarPedido getview$CadastrarPedido() {
        return (CadastrarPedido) getBean("view$CadastrarPedido");
    }

    /**
     * <p>Retornar uma referência para o Bean de dados limitados.</p>
     *
     * @retorna uma referência para o bean de dados limitados
     */
    protected Login getview$Login() {
        return (Login) getBean("view$Login");
    }

    /**
     * <p>Retornar uma referência para o Bean de dados limitados.</p>
     *
     * @retorna uma referência para o bean de dados limitados
     */
    protected BuscarRepresentante getview$BuscarRepresentante() {
        return (BuscarRepresentante) getBean("view$BuscarRepresentante");
    }

    /**
     * <p>Retornar uma referência para o Bean de dados limitados.</p>
     *
     * @retorna uma referência para o bean de dados limitados
     */
    protected BuscarVendedor getview$BuscarVendedor() {
        return (BuscarVendedor) getBean("view$BuscarVendedor");
    }

    /**
     * <p>Retornar uma referência para o Bean de dados limitados.</p>
     *
     * @retorna uma referência para o bean de dados limitados
     */
    protected CadastrarPessoaJuridica getview$CadastrarPessoaJuridica() {
        return (CadastrarPessoaJuridica) getBean("view$CadastrarPessoaJuridica");
    }

    /**
     * <p>Retornar uma referência para o Bean de dados limitados.</p>
     *
     * @retorna uma referência para o bean de dados limitados
     */
    protected BuscarNotaFiscal getview$BuscarNotaFiscal() {
        return (BuscarNotaFiscal) getBean("view$BuscarNotaFiscal");
    }

    /**
     * <p>Retornar uma referência para o Bean de dados limitados.</p>
     *
     * @retorna uma referência para o bean de dados limitados
     */
    protected CadastrarVendedor getview$CadastrarVendedor() {
        return (CadastrarVendedor) getBean("view$CadastrarVendedor");
    }

    public void inicializaCampos(){
        panelPopup.setRendered(false);

        botaoPlanoPagamento.clear();
        botaoPlanoPagamento.add(new SelectItem(1,"A Vista"));
        botaoPlanoPagamento.add(new SelectItem(2,"2 Vezes"));
        botaoPlanoPagamento.add(new SelectItem(3,"3 Vezes"));
        botaoPlanoPagamento.add(new SelectItem(4,"5 Vezes"));

        //para preencher o combobox
        setSelectOneMenu1DefaultItems1(new DecoradorInicializaCombos().inicializarCampoPessoaFisica());
        setSelectOneMenu1DefaultItems(new DecoradorInicializaCombos().inicializaCampoVendedor());

        campoValorPrazo.setMaxlength(10);
        campoValorVista.setMaxlength(10);
        campoNumeroProdutos.setMaxlength(6);
        campoQuantidade.setMaxlength(6);
        campoId1.resetValue();
        produtoABuscar.resetValue();
        campoQuantidade.resetValue();
        campoValorUnitario.resetValue();
        campoCodOrc.resetValue();
        campoVendedor.resetValue();
        campoCliente.resetValue();
        campoNumeroProdutos.resetValue();
        campoValorVista.resetValue();
        opcaoPlanoPagamento.resetValue();
        campoValorPrazo.resetValue();
        campoObservacoes.resetValue();
        validadeProposta.resetValue();
        dataOrcamento.resetValue();

        //desabilita aba 02/habilita01/ coloca na aba 01
        aba02.setDisabled(true);
        aba01.setDisabled(false);
        painelAbasOrcamento.setSelectedIndex(0);

        dataTable1Model.setWrappedData(null);
        //mostra o valor do id correto para inserção no banco
        SessionFacadeBuscarImplements facadeBusca= new SessionFacadeBuscarImplements();
        campoId1.setValue(facadeBusca.totalDeRegistros(OrcamentoVO.class)+1);
        campoIdItens.setValue(facadeBusca.totalDeRegistros(OrcamentoVO.class)+1);
        //disabilita os botoes da tabela de itens
        this.controlaBotoesPaginacaoTabelaItens(0);
        //limpa as listas que preenche a tabela de itens
        this.getListaDecoradora().removeAll(this.getListaDecoradora());
        this.getListaItensOrcamento().removeAll(this.getListaItensOrcamento());
        this.getListaProdutos().removeAll(this.getListaProdutos());

    }

    public void limparCampos() {
        campoId1.resetValue();
        produtoABuscar.resetValue();
        campoQuantidade.resetValue();
        campoValorUnitario.resetValue();
        campoCodOrc.resetValue();
        campoVendedor.resetValue();
        campoCliente.resetValue();
        campoNumeroProdutos.resetValue();
        campoValorVista.resetValue();
        opcaoPlanoPagamento.resetValue();
        campoValorPrazo.resetValue();
        campoObservacoes.resetValue();
        validadeProposta.resetValue();
        dataOrcamento.resetValue();
     }

    public String produtoABuscar_action() {
     SessionFacadeBuscarImplements sessionBusca = new  SessionFacadeBuscarImplements();
       Iterator it_produtos = sessionBusca.buscaPorNome("descricao",produtoABuscar.getValue().toString(), ProdutoVO.class).iterator();
       ProdutoVO  produto = (ProdutoVO)it_produtos.next();
       campoValorUnitario.setValue(produto.getPrecoVenda());
       campoValorUnitario.setEffect(new Highlight());
      return null;
    }

     public String tabelaItensOrcamento_firstPageAction() {
        dataTable1Model.setWrappedData(this.getPaginacaoTabelaItens().firstPage());
          tabelaItensOrcamentoFooterFirstButton.setDisabled(true);
            tabelaItensOrcamentoFooterPreviousButton.setDisabled(true);
            if(this.getPaginacaoTabelaItens().getTotalPaginas()>1){
                tabelaItensOrcamentoFooterNextButton.setDisabled(false);
                tabelaItensOrcamentoFooterLastButton.setDisabled(false);
            }
       return null;
    }


    public String tabelaItensOrcamento_previousPageAction() {
           dataTable1Model.setWrappedData(this.getPaginacaoTabelaItens().previousPage());
             if(this.getPaginacaoTabelaItens().getNumeroDaPagina()==1){
                  tabelaItensOrcamentoFooterNextButton.setDisabled(true);
                  tabelaItensOrcamentoFooterFirstButton.setDisabled(true);
                  tabelaItensOrcamentoFooterPreviousButton.setDisabled(true);
            }
            if(this.getPaginacaoTabelaItens().getTotalPaginas()>1){
                 tabelaItensOrcamentoFooterNextButton.setDisabled(false);
            }
            if(this.getPaginacaoTabelaItens().getNumeroDaPagina() >= 2){
                tabelaItensOrcamentoFooterFirstButton.setDisabled(false);
            }
           return null;
           }

    public String tabelaItensOrcamento_nextPageAction() {
          dataTable1Model.setWrappedData(this.getPaginacaoTabelaItens().nextPage());
          tabelaItensOrcamentoFooterPreviousButton.setDisabled(false);
            if(this.getPaginacaoTabelaItens().getTotalPaginas()==this.getPaginacaoTabelaItens().getNumeroDaPagina()){
                 tabelaItensOrcamentoFooterNextButton.setDisabled(true);
                 tabelaItensOrcamentoFooterLastButton.setDisabled(true);
            }
            if(this.getPaginacaoTabelaItens().getNumeroDaPagina() >= 2){
               tabelaItensOrcamentoFooterFirstButton.setDisabled(false);
            }
        return null;
    }

    public String tabelaItensOrcamento_lastPageAction() {
         dataTable1Model.setWrappedData(this.getPaginacaoTabelaItens().lastPage());
        if(this.getPaginacaoTabelaItens().getTotalPaginas()==this.getPaginacaoTabelaItens().getNumeroDaPagina()){
                  tabelaItensOrcamentoFooterLastButton.setDisabled(true);
                  tabelaItensOrcamentoFooterNextButton.setDisabled(true);
                 tabelaItensOrcamentoFooterPreviousButton.setDisabled(false);
                  tabelaItensOrcamentoFooterFirstButton.setDisabled(false);
         }
         if(this.getPaginacaoTabelaItens().getNumeroDaPagina() >= 2){
               tabelaItensOrcamentoFooterFirstButton.setDisabled(false);
         }
         return null;
    }

    public String btnRemoverItem_action() {
        int indiceRemover = 0;
        if(this.getPaginacaoTabelaItens().getNumeroDaPagina()==1){
              indiceRemover = tabelaItensOrcamento.getRowIndex();
        }else{
            indiceRemover = this.getPaginacaoTabelaItens().getFirstResult()+indiceRemover;
            System.out.println(indiceRemover);
        }
      this.getListaDecoradora().remove(indiceRemover);
      this.getListaProdutos().remove(indiceRemover);
      dataTable1Model.setWrappedData(this.getListaDecoradora());
      //controle da paginacao apos remocao
      this.setPaginacaoTabelaItens(new PaginacaoListaCincoEmCinco(this.getListaDecoradora()));
      //controle dos botoes da paginacao da tabela de itens
      this.controlaBotoesPaginacaoTabelaItens(this.getListaDecoradora().size());
      //calcula valor total produtos
      campoValorTotalProdutos.setValue(digitos.format(new OrcamentoBO().calculaTotalProduto(this.getListaDecoradora())));
      this.limpaCamposItem();
      return null;

    }


    public double parserDouble(Object o){
        return Double.parseDouble(o.toString());
    }
     public int parserInt(Object o){
        return Integer.parseInt(o.toString());
    }

    public void controlaPopup(boolean renderedPopup,String textoPoup,boolean btn1Rendered, boolean btn2Rendered,
            String textobtn1, String textobtn2){
        panelPopup.setRendered(renderedPopup);
        textoPopUp.setValue(textoPoup);
        btnPopUp1.setValue(textobtn1);
        btnPopUp1.setRendered(btn1Rendered);
        btnPopUp2.setRendered(btn2Rendered);
        btnPopUp2.setValue(textobtn2);
    }

    public String btnPopUp1_action() {
        if(controleSaida==1){
            return "voltar";
        }
        else{
        SessionFacadeCadastrarImplements facadeCadastrar =  new  SessionFacadeCadastrarImplements();
        Date validateProposta = (Date) (Object) validadeProposta.getValue();
        Date dateOrcamento = (Date) (Object) dataOrcamento.getValue();
        try{          
          facadeCadastrar.cadastrarOrcamento(
               Integer.parseInt(campoVendedor.getValue().toString()),
               Integer.parseInt(campoId1.getValue().toString()),
               Integer.parseInt(campoCliente.getValue().toString()),
               dateOrcamento,
               validateProposta,
               this.parserInt(campoNumeroProdutos.getValue()),
               this.parserInt(opcaoPlanoPagamento.getValue()),
               this.parserDouble(campoValorVista.getValue()), 
               this.parserDouble(campoValorPrazo.getValue()),
               campoObservacoes.getValue().toString(),
               this.getListaItensOrcamento(),
               this.getListaProdutos());

          controlaPopup(true,"Orçamento Cadastrado com Sucesso!",false,true,"","OK");
          limparCampos();
          limpaCamposItem();
          inicializaCampos();

           }catch(Exception e){
               controlaPopup(true,"Erro:"+e.getMessage()+"caused by: "+e.getStackTrace(),false,true,"","OK");
               System.err.println("Erro:"+e.getMessage()+"caused by: "+e.getStackTrace());
           }
        return null;
        }
    }

    public String btnPopUp2_action() {
        panelPopup.setRendered(false);
        return "sair";
    }

    public String btn_cadastrar_action() {
        if(campoValorPrazo.getValue().equals("")){
            campoValorPrazo.setValue(0.0);
        }
        controlaPopup(true,"Deseja confirmar Cadastro ?",true,true,"Sim","Não");

        return null;
    }


    public String btn_add_action() {
     if(!produtoABuscar.getValue().toString().equals("")){
     try{

            if(campoQuantidade.getValue().toString().equals("")){
                campoQuantidade.setValue(1);
                btn_add_action();
                limpaCamposItem();
            }
            else{
            //variaveis de controle do metodo
            int indiceElementoRepetido=0;
            boolean temElementoRepetido= false;

            //busca o produto no banco
            Iterator it_produtos = new  SessionFacadeBuscarImplements().buscaPorNome("descricao",produtoABuscar.getValue().toString(), ProdutoVO.class).iterator();
            ProdutoVO produto = (ProdutoVO)it_produtos.next();
            //se a lista for vazia
            if(this.getListaProdutos().isEmpty()){
                 //cria um decorador e seta seus atributos
                  DecoradorNF decorador = new DecoradorNF();
                  decorador.setCodProduto(produto.getCodProduto());
                  decorador.setDescricaoProduto(produto.getDescricao());
                  decorador.setQuantidade(Double.parseDouble(campoQuantidade.getValue().toString()))  ;
                  decorador.setValorUnitario(Double.parseDouble(campoValorUnitario.getValue().toString()));
                  decorador.setTotal();
                  this.getListaDecoradora().add(decorador);
                  this.getListaProdutos().add(produto);
             }else{
                int tamanhoLista = this.getListaProdutos().size();
                //verifica se jÃ¡ hÃ¡ o produto na lista
                for(int i = 0; i< tamanhoLista; i++){
                    if( this.getListaProdutos().get(i).getCodProduto()==produto.getCodProduto()){
                       indiceElementoRepetido = i; //guarda a posicao do elemento repetido
                       temElementoRepetido = true; ///variavel para controle da logica
                    }//fim if
                }//fim for
                //se ja existe o elemento na lista
                if(temElementoRepetido){
                    //modifica os atributos
                    DecoradorNF decorador = this.getListaDecoradora().get(indiceElementoRepetido);
                    double novaQuantidade = Double.parseDouble(campoQuantidade.getValue().toString());
                    double quantidadeAtual = decorador.getQuantidade();
                    decorador.setQuantidade(quantidadeAtual+novaQuantidade);
                    decorador.setTotal();
                    //remove o decorador com dados nÃ£o atualizados
                    this.getListaDecoradora().remove(indiceElementoRepetido);
                    //adiciona o decorador modificado na lista
                    this.getListaDecoradora().add(indiceElementoRepetido,decorador);
                }else{//se nÃ£o houver elemento repetido
                      DecoradorNF decorador = new DecoradorNF();
                       decorador.setCodProduto(produto.getCodProduto());
                       decorador.setDescricaoProduto(produto.getDescricao());
                       decorador.setQuantidade(Double.parseDouble(campoQuantidade.getValue().toString()))  ;
                       decorador.setValorUnitario(Double.parseDouble(campoValorUnitario.getValue().toString()));
                       decorador.setTotal();
                       this.getListaDecoradora().add(decorador);
                       this.getListaProdutos().add(produto);

                }//fim else
             }//fim else

             //calcula valor total produtos
             campoValorTotalProdutos.setValue(digitos.format(new OrcamentoBO().calculaTotalProduto(this.getListaDecoradora())));
             //preenche a tabela
             dataTable1Model.setWrappedData(this.getListaDecoradora());
             this.setPaginacaoTabelaItens(new PaginacaoListaCincoEmCinco(this.getListaDecoradora()));
             //controle dos botoes da paginacao da tabela de itens
             this.controlaBotoesPaginacaoTabelaItens(this.getListaDecoradora().size());
             //limpa os campos
             limpaCamposItem();
             }
             }catch(NumberFormatException e){
                System.err.println("Necessario adicionar uma quantidade. Erro: "+e.getMessage()+e.getStackTrace());

             }finally{
               return null;
            }
     }
     else
         controlaPopup(true, "Selecione um Produto", false, true, "", "Ok");
     return null;
    }//fim add

     public void limpaCamposItem(){
        produtoABuscar.resetValue();
        campoValorUnitario.resetValue();
        campoQuantidade.resetValue();
    }

     //meotodo para controle dos botoes da paginacao
    public void controlaBotoesPaginacaoTabelaItens(int tamanhoLista){
        if((tamanhoLista == 0)||(tamanhoLista<=5)){
            //disabilita os botoes da tabela de itens
            tabelaItensOrcamentoFooterFirstButton.setDisabled(true);
            tabelaItensOrcamentoFooterPreviousButton.setDisabled(true);
            tabelaItensOrcamentoFooterNextButton.setDisabled(true);
            tabelaItensOrcamentoFooterLastButton.setDisabled(true);
        }
        if(tamanhoLista > 5){//se a lista tiver mais que uma pagina
            tabelaItensOrcamentoFooterNextButton.setDisabled(false);
            tabelaItensOrcamentoFooterLastButton.setDisabled(false);
        }
    }


    public void produtoABuscar_processValueChange(ValueChangeEvent vce) {
         setItem(new SessionFacadeBuscarImplements().consultaSelectInputText(3, "descricao", produtoABuscar.getValue().toString(), ProdutoVO.class));
    }

    //botao remover item da tabela
    public String buttonRemoverItem_action() {
         this.getListaDecoradora().remove(tabelaItensOrcamento.getRowData());
         dataTable1Model.setWrappedData(this.getListaDecoradora());
         campoNumeroProdutos.setValue(tabelaItensOrcamento.getRowCount());
         painelAbasOrcamento.setSelectedIndex(1);
         return null;
    }



    public String link_finalizaOrcamento_action() {
      if((this.tabelaItensOrcamento.getRowCount()!=-1)&&(this.tabelaItensOrcamento.getRowCount()!=0)){
          this.setOrcamentoBo(new OrcamentoBO());
          this.setListaItensOrcamento(this.getOrcamentoBo().finalizaOrcamento(this.getListaDecoradora()));       
           //habilita/desabilita abas
           aba02.setDisabled(false);
           aba01.setDisabled(true);
           //muda de aba
           painelAbasOrcamento.setSelectedIndex(1);
           campoNumeroProdutos.setValue(this.getListaDecoradora().size());
           campoValorVista.setValue(this.getOrcamentoBo().getValorTotalProdutos());
      }else{          
            controlaPopup(true,"Necessário adicionar itens ao orçamento antes de finaliza-lo!",false,true,"OK","OK");
      }
      return null;
    }//fim link finalizar nota action

    public static PaginacaoListaCincoEmCinco getPaginacaoTabelaItens() {
        return paginacaoTabelaItens;
    }

    public static void setPaginacaoTabelaItens(PaginacaoListaCincoEmCinco paginacaoTabelaItens) {
        CadastrarOrcamento.paginacaoTabelaItens = paginacaoTabelaItens;
    }


    public String commandLink1_action() {
        painelAbasOrcamento.setSelectedIndex(0);
        aba01.setDisabled(false);
        aba02.setDisabled(true);
        return null;
    }

    

    public String btn_voltar_action() {
        controlaPopup(true, "Deseja Sair?", true, true, "Sim", "Não");

        controleSaida = 1;
        return null;
    }
   
}
